xlv.obj.pxmlWriter={
	extend:function(){
		this.extend('xlv.obj.pxml');
	},
	implement:function(){
	},
	create:function(tag){
		var div=document.createElement((tag||'div'));
		div.setAttribute('xlvobject','xlv.obj.pxmlWriter');
		return div;			
	},
	properties:{
		removeItemString:'remove item :',
		addItemString:'+ add item',
		addOptionString:'+ add option',
		inputNameString:'input name'
	},
	method:{
		_click:function(event){
			var target=event.target;
			if(target.id=='xlvid_remove'){
				event.stop();
				var item=this.targetElement(target,{id:'xlvid_item'});
				var pxml=item.pNode.getAttribute('pxml');
				var pxml_item=Element.hasClassName(item,'pxml_item');
				var name=xlv.util.getElementValue(xlv.util.findChild(item,{id:'xlvid_name'}));
				if(Element.hasClassName(item,'select_node')&& Element.hasClassName(item,'item_node')&&Element.hasClassName(item,'write')){
					var inp=xlv.util.findChild(item,{id:'xlvid_input'});
					name=(inp.value==inp.blank)?'':inp.value;
				}
				if(name==''||confirm(this.$P.removeItemString+name)){
					if(pxml_item)item.pNode.parentNode.removeChild(item.pNode);
					item.parentNode.removeChild(item);
				}
				return;
			}
			if(target.id=='xlvid_multiple_onoff'){
				event.stop();
				var item=this.targetElement(target,{id:'xlvid_item'});
				Element.toggleClassName(item,'checked');
				var checked=Element.hasClassName(item,'checked');
				if(checked)	item.pNode.setAttribute('multiple','true');
				else {
					item.pNode.removeAttribute('multiple');
					var box=xlv.util.findParent(item,{id:'pxml_box'});
					var lis=xlv.util.descendants(box,{tag:'li',id:'xlvid_item'});
					var got=false;
					for(var i=0;i<lis.length;++i){
						if(Element.hasClassName(lis[i],'item_node')){
							if(!got && Element.hasClassName(lis[i],'checked'))got=true;
							else Element.removeClassName(lis[i],'checked');
						}
					}
				}
			}
			if(target.id=='xlvid_input' || target.id=='xlvid_input_value'){
				return event.stop();
			}
			if(target.id=='xlvid_name'){
				var item=this.targetElement(target,{id:'xlvid_item'});
				if(Element.hasClassName(item,'add_item')){
					if(Element.hasClassName(item,'select_node')){
						event.stop();
						this.addOption(item);
					}
					if(Element.hasClassName(item,'group')){
						event.stop();
						var node=this.addSelectXml(item);
						var li = this._createLINode(null,node);
						item.parentNode.insertBefore(li,item);
						this._createBox(node);
					}
				}
			}
			this.$super('xlv.obj.pxml._click',event);
		},
		_commitBox:function(box){
			var pxml=box.pNode.getAttribute('pxml');
			if(pxml=='select' && this._isWritable(box.pNode)){
				var lis=xlv.util.descendants(box,{tag:'li'},false,false);
				var options='';
				var values='';
				var data='';
				for(var i=0;i<lis.length;++i){
					if(Element.hasClassName(lis[i],'attr_name')){
						var input = xlv.util.findChild(lis[i],{tag:'input'},false,false);
						input.onblur();
						if(input) {
							var value=(input.value==input.blank)?'':input.value;
							if(value=='') {
								alert(this.$P.inputNameString);
								return false;
							}
							lis[i].pNode.setAttribute('name',value);
						}
					}
					if(Element.hasClassName(lis[i],'item_node')){
						var checked=Element.hasClassName(lis[i],'checked');
						var inp1= xlv.util.findChild(lis[i],{id:'xlvid_input'},false,false);
						inp1.onblur();
						var inp2= xlv.util.findChild(lis[i],{id:'xlvid_input_value'},false,false);
						inp2.onblur();
						lis[i].option=(inp1.value==inp1.blank)?'':(inp1.value||'');
						lis[i].optval=(inp2.value==inp2.blank)?'':(inp2.value||'');
						options+=((options!='')?',':'')+lis[i].option;
						values+=((values!='')?',':'')+lis[i].optval;
						if(checked) {
							data+=((data!='')?',':'')+lis[i].option;
							if(lis[i].pNode.getAttribute('showValue')=='true')data+='('+lis[i].optval+')';
						}
					}
				}
				box.pNode.setAttribute('options',options);
				box.pNode.setAttribute('values',values);
				xlv.util.setXmlText(box.pNode,data);
			}
			return this.$super('xlv.obj.pxml._commitBox',box);
		},
		_refreshBox:function(box){
			var lis=xlv.util.descendants(box,{tag:'li'},false,false);
			for(var i=0;i<lis.length;++i){
				if(this._isWritable(lis[i].pNode)){
					var name=xlv.util.findChild(lis[i],{id:'xlvid_name'},false,false);
					if(name)xlv.util.setElementValue(name, lis[i].pNode.getAttribute('name'));
					var value=xlv.util.findChild(lis[i],{id:'xlvid_value'},false,false);
					if(value && value.style.display != 'none')this._fixElementWidth(lis[i],value,42);
				}
			}
			this.$super('xlv.obj.pxml._refreshBox',box);
		},
		_completeCreateULGroup:function(gul){
			if(this._isWritable(gul.pNode)){
				var li,name;
				gul.appendChild(li=document.createElement('li'));
				li.setAttribute('id','xlvid_item');
				li.pNode=gul.pNode;
				Element.addClassName(li,'group');
				Element.addClassName(li,'add_item');
				Element.addClassName(li,'write');
				li.appendChild(name=document.createElement('div'));
				name.setAttribute('id','xlvid_name'); 
				xlv.util.setElementValue(name,this.$P.addItemString);
			}
		},
		nodeForBox:function(node,box){
			if(box.pNode==node)return;
			this.$super('xlv.obj.pxml.nodeForBox',node,box);
			if(this._isWritable(node)) this._createItemAttrGroup(box,node);
		},
		_createItemAttrGroup:function(box,node){
			var writable=this._isWritable(node);
			if(writable){
				var prolog=node.getAttribute('prolog');
				var epilog=node.getAttribute('epilog');
				node.setAttribute('prolog','item name setting');
				node.setAttribute('epilog','option items below');
				//
				var ul=this._createULGroup(box,node,true);
				var li=document.createElement('li');
				ul.appendChild(li);
				li.setAttribute('id','xlvid_item');
				li.pNode=node;
				Element.addClassName(li,'node_attr');
				Element.addClassName(li,'attr_name');
				Element.addClassName(li,'write');
				var input=document.createElement('input');
				input.setAttribute('id', 'xlvid_input');
				li.appendChild(input);
				input.blank=this._getNodeBlankString(li.pNode);
				input.value=li.pNode.getAttribute('name');
				input.onfocus=(function(){
					if(this.value==this.blank)this.value='';
					Element.removeClassName(li,'blank');
					Element.addClassName(li,'editing');
					}).bind(input);
				input.onblur=(function(){
					Element.removeClassName(li,'editing');
					if(this.value.length==0){
						Element.addClassName(li,'blank');
						this.value=this.blank;
					}
					}).bind(input);
				input.onblur();
				var img=document.createElement('img');
				li.appendChild(img);
				img.setAttribute('id','xlvid_input_button');
				img.src='/xlive/images/pxml/input_img.png';
				//this._fixElementWidth(li,input,28);
				input.style.width=(li.clientWidth-52)+'px';
				// multiple
				var li2=document.createElement('li');
				ul.appendChild(li2);
				li2.setAttribute('id','xlvid_item');
				li2.pNode=node;
				Element.addClassName(li2,'node_attr');
				Element.addClassName(li2,'attr_multiple');
				Element.addClassName(li2,'write');
				var name;
				li2.appendChild(name=document.createElement('div'));
				name.setAttribute('id','xlvid_name');
				xlv.util.setElementValue(name,'multiple');
				var div;
				li2.appendChild(div=document.createElement('div'));
				div.setAttribute('id','xlvid_multiple_onoff');
				//
				if(node.getAttribute('multiple')=='true')Element.addClassName(li2,'checked');
				if(prolog)node.setAttribute('prolog',prolog);
				if(epilog)node.setAttribute('epilog',epilog);
			}
		},
		_isWritable:function(node){
			return (xlv.util.selectXmlSingleNode('ancestor-or-self::*[@writable=\'true\']',node))?true:false;
		},
		_createLINode:function(ul,node){
			var li = this.$super('xlv.obj.pxml._createLINode',ul,node);
			if(this._isWritable(node)){
				Element.addClassName(li,'write');
				var remove=document.createElement('img');
				li.insertBefore(remove,li.firstChild);
				remove.setAttribute('id','xlvid_remove');
				remove.src='/xlive/images/pxml/minus.png';
				var advance=xlv.util.findChild(li,{id:'xlvid_advance'},false,false);
				if(advance)	advance.src='/xlive/images/pxml/write_advance.png';
				var value=xlv.util.findChild(li,{id:'xlvid_value'},false,false);
				if(value && value.style.display != 'none') this._fixElementWidth(li,value,54);
			}
			this.styleFor(li,li.id);
			return li;
		},
		_selectNode:function(ul,node){
			if(!this._isWritable(node))return this.$super('xlv.obj.pxml._selectNode',ul,node);
			var options=node.getAttribute('options');
			var values=''+(node.getAttribute('values')||node.getAttribute('options'));
			var showvalue=(node.getAttribute('showValue')=='true');
			var data=xlv.util.getXmlText(node);
			var li,remove,img,name,input1,input2,value;
			options=options.split(',');
			values=values.split(',');
			for(var i=0;i<options.length;++i){
				ul.appendChild(li=document.createElement('li'));
				li.setAttribute('id','xlvid_item');
				li.pNode=node;
				li.option=(options[i]||'');
				li.optval=(values[i]||'');
				Element.addClassName(li,'select_node');
				Element.addClassName(li,'item_node');
				Element.addClassName(li,'write');
				
				remove=document.createElement('img');
				li.appendChild(remove);
				remove.setAttribute('id','xlvid_remove');
				remove.src='/xlive/images/pxml/minus.png';
				
				li.appendChild(name=document.createElement('div'));
				name.setAttribute('id','xlvid_name'); 
				xlv.util.setElementValue(name,li.option);
				name.style.display='none';
				li.appendChild(input1=document.createElement('input'));
				input1.blank='name';
				input1.setAttribute('id','xlvid_input');
				input1.value=li.option;
				input1.onfocus=(function(){
					if(this.value==this.blank)this.value='';
					Element.removeClassName(this,'blank');
					Element.addClassName(this,'editing');
					}).bind(input1);
				input1.onblur= (function(){
					Element.removeClassName(this,'editing');
					if(this.value.length==0){
						Element.addClassName(this,'blank');
						this.value=this.blank;
					}
					}).bind(input1);
				input1.onblur();
				li.appendChild(img=document.createElement('img'));
				img.setAttribute('id','xlvid_checked');
				img.src='/xlive/images/pxml/checked.png';
				
				li.appendChild(value=document.createElement('input'));
				value.setAttribute('id','xlvid_value');
				value.value=li.optval;
				value.style.display='none';
				
				li.appendChild(input2=document.createElement('input'));
				input2.setAttribute('id','xlvid_input_value');
				input2.value=li.optval;
				input2.blank='value';
				
				input2.onfocus=(function(){
					if(this.value==this.blank)this.value='';
					Element.removeClassName(this,'blank');
					Element.addClassName(this,'editing');
					}).bind(input2);
				input2.onblur= (function(){
					Element.removeClassName(this,'editing');
					if(this.value.length==0){
						Element.addClassName(this,'blank');
						this.value=this.blank;
					}
					}).bind(input2);
				input2.onblur();
				var w=(li.clientWidth-24*2-40)/2;
				input1.style.width=w+'px';
				input2.style.width=w+'px';
				if(!showvalue) {
					input2.style.display='none';
					input1.style.width=(w*2)+'px';
				}
				var checked=(li.option!='' && data.indexOf(li.option)>=0);
				if(checked)Element.addClassName(li,'checked');
			}
			////addoption
			ul.appendChild(li=document.createElement('li'));
			li.setAttribute('id','xlvid_item');
			li.pNode=node;
			Element.addClassName(li,'select_node');
			Element.addClassName(li,'add_item');
			Element.addClassName(li,'write');
			li.appendChild(name=document.createElement('div'));
			name.setAttribute('id','xlvid_name'); 
			xlv.util.setElementValue(name,this.$P.addOptionString);
		},
		addOption:function(addli){
			var node=addli.pNode;
			var showvalue=(node.getAttribute('showValue')=='true');
			var data=xlv.util.getXmlText(node);
			var li,remove,img,name,input1,input2,value;
			addli.parentNode.insertBefore(li=document.createElement('li'),addli);
			li.setAttribute('id','xlvid_item');
			li.pNode=node;
			li.option='';
			li.optval='';
			Element.addClassName(li,'select_node');
			Element.addClassName(li,'item_node');
			Element.addClassName(li,'write');
			
			remove=document.createElement('img');
			li.appendChild(remove);
			remove.setAttribute('id','xlvid_remove');
			remove.src='/xlive/images/pxml/minus.png';
			
			li.appendChild(name=document.createElement('div'));
			name.setAttribute('id','xlvid_name'); 
			xlv.util.setElementValue(name,li.option);
			name.style.display='none';
			li.appendChild(input1=document.createElement('input'));
			input1.blank='name';
			input1.setAttribute('id','xlvid_input');
			input1.value=li.optval;
			input1.onfocus=(function(){
				if(this.value==this.blank)this.value='';
				Element.removeClassName(this,'blank');
				Element.addClassName(this,'editing');
				}).bind(input1);
			input1.onblur= (function(){
				Element.removeClassName(this,'editing');
				if(this.value.length==0){
					Element.addClassName(this,'blank');
					this.value=this.blank;
				}
				}).bind(input1);
			input1.onblur();
			li.appendChild(img=document.createElement('img'));
			img.setAttribute('id','xlvid_checked');
			img.src='/xlive/images/pxml/checked.png';
			
			li.appendChild(value=document.createElement('input'));
			value.setAttribute('id','xlvid_value');
			value.value='';
			value.style.display='none';
			
			li.appendChild(input2=document.createElement('input'));
			input2.setAttribute('id','xlvid_input_value');
			input2.value='';
			input2.blank='value';
			
			input2.onfocus=(function(){
				if(this.value==this.blank)this.value='';
				Element.removeClassName(this,'blank');
				Element.addClassName(this,'editing');
				}).bind(input2);
			input2.onblur= (function(){
				Element.removeClassName(this,'editing');
				if(this.value.length==0){
					Element.addClassName(this,'blank');
					this.value=this.blank;
				}
				}).bind(input2);
			input2.onblur();
			var w=(li.clientWidth-24*2-40)/2;
			input1.style.width=w+'px';
			input2.style.width=w+'px';
			
			if(!showvalue) {
				input2.style.display='none';
				input1.style.width=(w*2)+'px';
			}

		},
		addSelectXml:function(gli){
			var s=gli.pNode.ownerDocument.createElement('i');
			s.setAttribute('pxml','select');
			s.setAttribute('name','');
			s.setAttribute('options','');
			s.setAttribute('values','');
			s.setAttribute('showValue','true');
			gli.pNode.appendChild(s);
			return s;
		}

	}
};
